# -*- coding: utf-8 -*-

from django.db import models
from wal.articulos.models import Articulo
from wal.clientes.models import Cliente
from wal.pedidos.models import Pedido
import datetime

PROCESOS_CHOICES = (
        ('C', 'Galvanizado en Caliente'),
        ('F', 'Galvanizado en Electrolítico'),
    )
CAUSAS_CHOICES = (
        ('P', 'Proceso'),
        ('L', 'Limpieza'),
        ('M', 'Material'),
    )
CONFORMIDAD_CHOICES = (
        ('C', 'Conforme'),
        ('N', 'No Conforme'),
    )
REPROG_CHOICES = (
        ('S', 'Si'),
        ('N', 'No'),
    )
# Create your models here.
class Control (models.Model):
    pedido = models.ForeignKey(Pedido)
    cliente = models.ForeignKey(Cliente)
    fecha = models.DateField(verbose_name="* Fecha",help_text='Fecha en la que se realizó el Control de Calidad')
    responsable = models.CharField(max_length=50,verbose_name="* Responsable",help_text='Nombre y Apellido de el que realizó el Control de Calidad')
    nombre = models.CharField(max_length=100,blank = True,null = True)
    unidades = models.IntegerField(blank = True,null = True)
    kgreal = models.FloatField(blank = True,null = True)
    kgproc = models.FloatField(blank = True,null = True)
    
    def save(self):
        if not self.unidades:
            self.unidades = 0
        if not self.kgreal:
            self.kgreal = 0
        if not self.kgproc:
            self.kgproc = 0
        self.nombre = str(self.pedido) + " (" + self.fecha.isoformat() + ")"
        super(Control, self).save()
    
    def __unicode__(self):
        return self.nombre

    class Admin:
        pass
    
class DetalleControl (models.Model):
    control = models.ForeignKey(Control)
    articulo = models.ForeignKey(Articulo,verbose_name="* Artículo",help_text='Nombre del artículo controlado')
    proceso = models.CharField(max_length=1,choices=PROCESOS_CHOICES,verbose_name="* Proceso de Galvanizado",help_text='Proceso de Galvanizado por el que pasaron los artículos')    
    cantidad = models.IntegerField(verbose_name="* Cantidad",help_text='Número de artículos de los que se tomaron las muestras')
    muestras = models.IntegerField(verbose_name="* Muestras",help_text='Número de muestras tomadas')
    peso = models.FloatField(blank = True,null = True,verbose_name="*  Peso",help_text='Peso del artículo')
    conformidad = models.CharField(max_length=1,choices=CONFORMIDAD_CHOICES,verbose_name="* Conformidad",help_text='Conformidad o no Conformidad del Control de Calidad del artículo')
    observacion = models.CharField(max_length=500,blank = True,null = True,verbose_name="  Observación",help_text='Observación')
    nuevo = models.CharField(max_length=1,choices=REPROG_CHOICES)
    porcentaje = models.FloatField(blank = True,null = True,default = 1,verbose_name="*  Factor Galvanizado Parcial",help_text='Porcentaje')
    
    def save(self):
        if not self.nuevo:
            self.nuevo = 'S'
        super(DetalleControl, self).save()
    
    class Admin:
        pass
    

class Evaluacion(models.Model):
    detalle = models.ForeignKey(DetalleControl)
    fecha = models.DateField(verbose_name="* Fecha",help_text='Fecha de emisión')
    motivo = models.CharField(max_length=500,verbose_name="* Motivo de la No Conformidad",help_text='Motivo de la No Conformidad')
    clase = models.CharField(blank = True,null = True,max_length=1,choices=CAUSAS_CHOICES,verbose_name="* Clase de Causa")
    causa = models.CharField(blank = True,null = True,max_length=500,verbose_name="* Causa")
    nombre = models.CharField(max_length=100,blank = True,null = True)
    
    
    def save(self):
        detalle = self.detalle
        control = detalle.control
        articulo = detalle.articulo
        self.nombre = str(control) + " (" + str(articulo) + ")"
        if not self.fecha:
            self.fecha = control.fecha
        super(Evaluacion, self).save()
    
    def __unicode__(self):
        return self.nombre

    class Admin:
        pass

class Accion(models.Model):
    evaluacion = models.ForeignKey(Evaluacion)
    accion = models.CharField(max_length=500,verbose_name="* Acción a tomar",help_text='Acción para corregir el error',blank = True,null = True)
    plazo = models.DateField(verbose_name="* Plazo",help_text='Fecha límite para realizar la acción')
    responsable = models.CharField(max_length=50,verbose_name="* Responsable",help_text='Nombre y Apellido de el que debe realizar la acción')
    conformidad = models.CharField(max_length=1,choices=CONFORMIDAD_CHOICES)
    reprogramado = models.CharField(max_length=1,choices=REPROG_CHOICES)
    ec = models.CharField(max_length=1,choices=CONFORMIDAD_CHOICES)
    
    def save(self):
        if not self.conformidad:
            self.conformidad = 'N'
        if not self.ec:
            self.ec = 'N'
        if not self.reprogramado:
            self.reprogramado = 'N'
        super(Accion, self).save()

    class Admin:
        pass
    
class Stock(models.Model):
    pedido = models.ForeignKey(Pedido)
    articulo = models.ForeignKey(Articulo,verbose_name="* Artículo",help_text='Nombre del artículo controlado')    
    proceso = models.CharField(max_length=1,choices=PROCESOS_CHOICES,verbose_name="* Proceso de Galvanizado",help_text='Proceso de Galvanizado por el que pasaron los artículos')
    cantidad = models.IntegerField(verbose_name="* Cantidad",help_text='Número de artículos de los que se tomaron las muestras')
    peso = models.FloatField(blank = True,null = True,verbose_name="  Peso",help_text='Peso del artículo')
    procesado = models.IntegerField()
    stock = models.IntegerField()
    despachado = models.IntegerField()
    
    class Admin:
        pass

